home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 2.iso / bin / viewDT < prev    next >
Text File  |  1996-11-11  |  10KB  |  402 lines

  1. #!/bin/ksh -p
  2. # setup correct directory from which to run Developer Toolbox
  3. dtdir="DT_utilities"
  4.  
  5. export PATH="/usr/bsd:/bin:/usr/bin:/usr/sbin:/usr/bin/X11"
  6. fullprog=$0
  7. typeset -r prog=${0##*/}
  8. progdir=${0%/*}
  9. if [[ "$progdir" = \/* ]]; then
  10.     typeset -r fullprogdir="$progdir"
  11. else
  12.     [[ "$progdir" = "$fullprog" ]] && progdir="."
  13.     cwd=$(pwd)
  14.     cd $(pwd)/$progdir
  15.     fullprogdir=$(pwd)
  16.     cd $cwd
  17.     typeset -r fullprogdir=$fullprogdir
  18. fi
  19. typeset -r fullprog="$fullprogdir/$prog"
  20. typeset -r progdir=$progdir
  21. typeset -r progdirname=$(basename $fullprogdir)
  22. typeset -r flags="hRru"
  23. typeset -r getoptflags=":${flags}f:C:\?"
  24. typeset -r numpositional=0
  25. if [[ "$TMPDIR" != "" ]]; then
  26.     typeset -r tmpdir="$TMPDIR"
  27. elif [[ -d /usr/var/tmp ]]; then
  28.     typeset -r tmpdir="/usr/var/tmp"
  29. else
  30.     typeset -r tmpdir="/tmp"
  31. fi
  32. typeset -r tmp=$tmpdir/$prog.$$
  33. cleanuplist="$tmp"
  34. typeset -r SigList="INT QUIT TERM HUP"
  35. typeset errexit=0
  36. trap "trap - EXIT $SigList; CleanUp" EXIT
  37. trap exit $SigList
  38.  
  39. # include this at beginning of each function as well
  40. if [ "$DEBUG" ] ; then set -$DEBUG ; : Debug enabled by envariable ; fi
  41.  
  42. Usage () {
  43.     echo "Usage: $prog [-r] [-f tmp_dir] [-C CD_dir]"
  44.     echo "       $prog -u [-f tmp_dir]"
  45.     echo "       $prog -R [-f tmp_dir]"
  46.     echo "       $prog -h\n"
  47.     echo "    -h        Help text (this stuff)."
  48.     echo "    -r        Remove $dtdir directory when $prog finishes."
  49.     echo "    -R        Just remove $dtdir directory."
  50.     echo "    -u        Just create $dtdir directory."
  51.     echo "    -f tmp_dir    Possible directory to hold $dtdir."
  52.     echo "    -C CD_dir    Directory of CD to be viewed."
  53. }
  54.  
  55. Exit() {
  56.     [ "$1" ] && echo "$*" >&2
  57.     errexit=1
  58.     exit
  59. }
  60.  
  61. UsageExit() {
  62.     [ "$1" ] && echo "$*" >&2
  63.     Usage >&2
  64.     Exit 
  65. }
  66.  
  67. Log () {
  68.     [[ "$verbose" = yes ]] && echo >&2 "$@"
  69. }
  70.  
  71. Do () {
  72.     [[ ! -z "$verbose" || ! -z "$noexecute" ]] && echo >&2 "$@"
  73.     [[ -z "$noexecute" ]] && "$@"
  74.     typeset evalstatus=$?
  75.     [[ ! -z "$noexecute" || $evalstatus = 0 ]]
  76. }
  77.  
  78. DoExit () {
  79.     Do $1 || Exit "$2"
  80. }
  81.  
  82. DoUsageExit () {
  83.     Do $1 || UsageExit "$2"
  84. }
  85.  
  86. CleanUp () {
  87.     : Add your own clean-up actions here
  88.  
  89.     eval /bin/rm -fr $cleanuplist
  90.     exit $errexit
  91. }
  92.  
  93. # Setexecutable variable_to_set executable absolute_path
  94. # also looks in same place this code came from
  95. SetExecutable () {
  96.     set -$DEBUG
  97.     typeset executable
  98.     executable=$(whence $2)
  99.     if [ "$executable" = "''" ] ; then
  100.             executable=$(whence $progdir/$2)
  101.             if [ "$executable" = "''" ] ; then
  102.                     executable=$3
  103.             fi
  104.     fi
  105.     [ -x $executable ] || return 1
  106. # this strips leading ././* to single ./
  107. #       [ "$( echo $executable | sed -e 's%^\./.*%%')" = "" ] &&
  108. #               executable="./${executable##*(./)}"
  109.     eval $1=\""$executable"\"
  110.     return 0
  111. }
  112.  
  113. SetExecExit () {
  114.     set -$DEBUG
  115.     SetExecutable $1 $2 $3 ||
  116.             Exit "Unable to locate $2 for execution"
  117. }
  118.  
  119. unset verbose noexecute removeDT DTUdir_list justload justrm CD_dir
  120. while getopts ${getoptflags} flag; do
  121.     case $flag in
  122.     f)
  123.         DTUdir_list="$DTUdir_list $OPTARG"
  124.             ;;
  125.     h | \?)
  126.             Usage >&2
  127.             exit 
  128.             ;;
  129.     u)
  130.         justload=-u
  131.             ;;
  132.     r)
  133.         removeDT=-r
  134.             ;;
  135.     R)
  136.         justrm=-R
  137.             ;;
  138.     C)
  139.         CD_dir="$OPTARG"
  140.             ;;
  141.     esac
  142. done
  143. shift OPTIND-1
  144.  
  145. if (( $# != $numpositional )) ; then
  146.     Usage >&2
  147.     Exit
  148. fi
  149.  
  150. #functions
  151. ###############################################################################
  152. addList() {
  153.     typeset list=$1 new=$2
  154.     [[ "$list" = "" ]] && list=" "
  155.     [[ "$list" != *" $new "* ]] && list="$list$new "
  156.     echo "$list"
  157. }
  158.  
  159. localSpace() {
  160.     typeset -i isfound 
  161.     typeset dir=$1 free
  162.     [[ "$dir" = "" || ! -d $dir || ! -w $dir ]] && return 1
  163.     /bin/df -k $dir | tail +2 | read _ _ _ _ free _
  164.     if ((util_size < free)); then
  165.         DTUdir=$dir
  166.         DT_util=$dir/$dtdir
  167.         return 0
  168.     else
  169.         nospace_list=$(addList "$nospace_list" $dir)
  170.         return 1
  171.     fi
  172. }
  173.  
  174. make_dirlist() {
  175.     typeset device dir alt_dirlist="" 
  176.     [[ "$DTUdir_list" != "" ]] && dirlist=$(addList "$dirlist" "$DTUdir_list")
  177.     dirlist=$(addList "$dirlist" "/usr/tmp")
  178.     alt_dirlist=$(addList "$alt_dirlist" "/usr")
  179.     dirlist=$(addList "$dirlist" "/var/tmp")
  180.     alt_dirlist=$(addList "$alt_dirlist" "/var")
  181.     cat /etc/mtab | while read device dir _; do
  182.         [[ "$device" != "/"* ]] && continue
  183.         [[ "$dir" = "/" ]] && continue 
  184.         [[ "$dir" = "/dev/fd" ]] && continue 
  185.         [[ "$dir" = "/proc" ]] && continue 
  186.         dirlist=$(addList "$dirlist" $dir/tmp)
  187.         alt_dirlist=$(addList "$alt_dirlist" $dir)
  188.     done
  189.     alt_dirlist=${alt_dirlist##*([ ])}
  190.     dirlist="$dirlist$alt_dirlist /tmp"
  191.     dirlist=${dirlist##*([ ])}
  192. }
  193.  
  194. find_dtdir() {
  195.     typeset dlist="$1" dir
  196.     while [[ "$dlist" != "" ]]; do
  197.         dir=$dlist
  198.         dir=${dir%%[ ]*}
  199.         dlist=${dlist##*([! ])*([ ])}
  200.         if [[ -d $dir/$dtdir ]]; then
  201.             DTUdir=$dir
  202.             DT_util=$dir/$dtdir
  203.             return 0
  204.         fi
  205.     done
  206.     return 1
  207. }
  208.  
  209. enumerate() {
  210.     typeset list="$1" either="$2" or="$3" word newlist last
  211.     list=${list##*([ ])}
  212.     list=${list%%*([ ])}
  213.     word=${list%%[ ]*}
  214.     list=${list##*([! ])*( )}
  215.     newlist="$word"
  216.     if [[ "$list" != "" ]]; then
  217.         newlist="$either $word"
  218.         last=${list##*[ ]}
  219.         list=${list%%*( )*([! ])}
  220.         while [[ "$list" != "" ]]; do
  221.             word=$list
  222.             word=${word%%[ ]*}
  223.             newlist="$newlist, $word"
  224.             list=${list##*([! ])*( )}
  225.         done;
  226.         newlist="$newlist $or $last"
  227.     fi
  228.     echo "$newlist"
  229. }
  230.  
  231. spaceCheck() {
  232.     typeset dirlist="$1" dlist dir last msg ret m0 m1 m2 m2 m4
  233.     dlist="$dirlist"
  234.     dirlist=""
  235.     while [[ "$dlist" != "" ]]; do
  236.         dir=$dlist
  237.         dir=${dir%%[ ]*}
  238.         dlist=${dlist##*([! ])*([ ])}
  239.         [[ "$dir" = "" || ! -d $dir || ! -w $dir ]] && continue
  240.         dirlist="$dirlist $dir"
  241.     done
  242.     dlist=${dirlist##*([ ])}
  243.     while [[ "$dlist" != "" ]]; do
  244.         dir=${dlist%%[ ]*}
  245.         dlist=${dlist##*([! ])*([ ])}
  246.         localSpace $dir && break
  247.         nospace_list="$nospace_list $dir"
  248.     done
  249.     if [[ "$DTUdir" != "" ]]; then
  250.         msg="The janitor plans to copy $util_size Kbytes to $DT_util.\n\
  251.             These are utilities necessary to view toolbox CDs."
  252.         if [[  "$nospace_list" != "" ]]; then
  253.              list=$(enumerate "$nospace_list" "either" "or")
  254.              msg="${msg}\nNo space was found on $list"
  255.         fi
  256.         msg="${msg}\nIf you wish to select a different location for \
  257.             these utilities,\n\
  258.             then press No and re-run $prog with the -f option\n\n\
  259.             Ready to copy $util_size Kbytes to $DT_util?"
  260.         ret=$($DT_xconfirm yesno "$msg")
  261.         [[ "$ret" = "No" ]] && exit
  262.         return 0
  263.     fi
  264.     list=$(enumerate "$nospace_list" "either" "or")
  265.     $DT_xconfirm warn "The janitor needed to copy $util_size Kbytes of\
  266.         utilities\n\
  267.         to your local disk in order to view these toolbox CDs.\n\
  268.         No space was found on $list\n\
  269.         Please re-run $prog with the -f option\n\
  270.         to select a suitable location for these utilities."
  271.     exit 1
  272. }
  273.  
  274. cp_one() {
  275.     typeset pat="$1"
  276.     cp -r $pat .
  277.     if (( $? )); then
  278.         $DT_xconfirm error "Unable to copy\n\
  279.             local Developer Toolbox $prog directory"
  280.         exit 1
  281.     fi
  282. }
  283.  
  284. cp_DT_Utilities() {
  285.     export DT_util_state=3
  286.     spaceCheck "$dirlist"
  287.     mkdir $DT_util
  288.     cd $DT_util
  289.     cp_one $CDROM_ROOT/.DT_Version
  290.     cp_one $CDROM_ROOT/bin
  291.     mv bin/* .
  292.     rm -rf bin
  293.     rm linkChunks
  294.     cp_one $CDROM_ROOT/toolbox/www/cgi-bin
  295.     cp_one $CDROM_ROOT/toolbox/www/icons
  296.     cp_one $CDROM_ROOT/toolbox/www/conf
  297.  
  298. }
  299.  
  300. upgrade_DT_Utilities() {
  301.     export DT_util_state=2
  302.     echo "\nremoving outdated Toolbox utilities\n"
  303.     rm -rf  $DT_util > /dev/null 2>&1
  304.     cp_DT_Utilities
  305. }
  306.  
  307. #start
  308. ###############################################################################
  309. DT_xconfirm="$fullprogdir/DT_xconfirm"
  310. fullprogdirdir=$(dirname $fullprogdir)
  311.  
  312. # See whether running from CDROM or DT_utilities 
  313.  
  314. if [[ -d $fullprogdirdir/toolbox ]]; then
  315.     unset DTUdir DT_util
  316.     if [[ "$CD_dir" = "" ]]; then
  317.         export CDROM_ROOT=$fullprogdirdir
  318.     else
  319.         if [[ ! -d $CD_dir/toolbox ]]; then
  320.             $DT_xconfirm error "The -C option directory ($CD_dir)\n\
  321.                 is not a valid Developer Toolbox CD directory"
  322.             exit 1
  323.         fi
  324.         export CDROM_ROOT="$CD_dir"
  325.     fi
  326. elif [[ -f $fullprogdir/.DT_Version ]]; then
  327.     if [[ "$justrm" != "" ]]; then
  328.         rm -rf $progdir
  329.         echo "\nremoving Toolbox utilities\n"
  330.         exit 0
  331.     fi
  332.     if [[ "$CD_dir" = "" ]]; then
  333.         $DT_xconfirm error "You must use the -C option when running\n\
  334.             $prog from $fullprogdir"
  335.         exit 1
  336.     fi
  337.     if [[ ! -d $CD_dir/toolbox ]]; then
  338.         $DT_xconfirm error "The -C option directory ($CD_dir)\n\
  339.             is not a valid Developer Toolbox CD directory"
  340.         exit 1
  341.     fi
  342.     DTUdir=$fullprogdirdir
  343.     DT_util=$fullprogdir
  344.     export CDROM_ROOT="$CD_dir"
  345. else
  346.     $DT_xconfirm error "You must run $prog from\n\
  347.         a Developer Toolbox CD directory\n\
  348.         or from a DT_utilities directory with the -C option"
  349.     exit 1
  350. fi
  351.  
  352. typeset -i util_size 
  353. typeset -i getdir=1 free CD_version DTU_version
  354. unset nospace_list dirlist 
  355.  
  356. #  find/make/update DT_utilities
  357.  
  358. make_dirlist
  359. if find_dtdir "$dirlist"; then
  360.     if [[ "$justrm" != "" ]]; then
  361.         rm -rf $DT_util
  362.         echo "\nremoving Toolbox utilities\n"
  363.         exit 0
  364.     fi
  365.     [[ -f $CDROM_ROOT/.DT_Size ]] && util_size=`cat $CDROM_ROOT/.DT_Size`
  366.     CDVfile="$CDROM_ROOT/.DT_Version"
  367.     DTVfile="$DT_util/.DT_Version"
  368.     CD_version=$(head -1 $CDVfile 2> /dev/null) 
  369.     DTU_version=$(head -1 $DTVfile 2> /dev/null)
  370.     if [[ -f $DTVfile ]] ; then
  371.         if ((DTU_version<CD_version)); then
  372.             upgrade_DT_Utilities
  373.         else
  374.             export DT_util_state=1
  375.             cd $DTUdir > /dev/null 2>&1
  376.         fi
  377.     else
  378.         upgrade_DT_Utilities
  379.     fi
  380. else
  381.     if [[ "$justrm" != "" ]]; then
  382.         echo "\nno Toolbox utilities to remove\n"
  383.         exit 1
  384.     fi
  385.     [[ -f $CDROM_ROOT/.DT_Size ]] && util_size=`cat $CDROM_ROOT/.DT_Size`
  386.     cp_DT_Utilities
  387. fi
  388.  
  389. [[ "$justload" != "" ]] && exit 0 
  390. if [[ "$removeDT" = "" ]]; then
  391.     exec $DT_util/runDT 
  392. else
  393.     exec $DT_util/runDT $DT_util
  394. fi
  395.  
  396. # Emacs exit, stops shell from parsing sh-mode
  397. exit 
  398.  
  399. #    Local variables:
  400. #    eval: (if (fboundp 'sh-mode) (sh-mode))
  401. #    end:
  402.